home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / TgaImagePlugin.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  3KB  |  95 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __version__ = '0.3'
  5. import Image
  6. import ImageFile
  7. import ImagePalette
  8.  
  9. def i16(c):
  10.     return ord(c[0]) + (ord(c[1]) << 8)
  11.  
  12.  
  13. def i32(c):
  14.     return ord(c[0]) + (ord(c[1]) << 8) + (ord(c[2]) << 16) + (ord(c[3]) << 24)
  15.  
  16. MODES = {
  17.     (1, 8): 'P',
  18.     (3, 1): '1',
  19.     (3, 8): 'L',
  20.     (2, 16): 'BGR;5',
  21.     (2, 24): 'BGR',
  22.     (2, 32): 'BGRA' }
  23.  
  24. def _accept(prefix):
  25.     return prefix[0] == '\x00'
  26.  
  27.  
  28. class TgaImageFile(ImageFile.ImageFile):
  29.     format = 'TGA'
  30.     format_description = 'Targa'
  31.     
  32.     def _open(self):
  33.         s = self.fp.read(18)
  34.         id = ord(s[0])
  35.         colormaptype = ord(s[1])
  36.         imagetype = ord(s[2])
  37.         depth = ord(s[16])
  38.         flags = ord(s[17])
  39.         self.size = (i16(s[12:]), i16(s[14:]))
  40.         if id != 0 and colormaptype not in (0, 1) and self.size[0] <= 0 and self.size[1] <= 0 or depth not in (8, 16, 24, 32):
  41.             raise SyntaxError, 'not a TGA file'
  42.         
  43.         if imagetype in (3, 11):
  44.             self.mode = 'L'
  45.             if depth == 1:
  46.                 self.mode = '1'
  47.             
  48.         elif imagetype in (1, 9):
  49.             self.mode = 'P'
  50.         elif imagetype in (2, 10):
  51.             self.mode = 'RGB'
  52.             if depth == 32:
  53.                 self.mode = 'RGBA'
  54.             
  55.         else:
  56.             raise SyntaxError, 'unknown TGA mode'
  57.         orientation = flags & 48
  58.         if orientation == 32:
  59.             orientation = 1
  60.         elif not orientation:
  61.             orientation = -1
  62.         else:
  63.             raise SyntaxError, 'unknown TGA orientation'
  64.         if imagetype & 8:
  65.             self.info['compression'] = 'tga_rle'
  66.         
  67.         if colormaptype:
  68.             start = i16(s[3:])
  69.             size = i16(s[5:])
  70.             mapdepth = i16(s[7:])
  71.             if mapdepth == 16:
  72.                 self.palette = ImagePalette.raw('BGR;16', '\x00\x00' * start + self.fp.read(2 * size))
  73.             elif mapdepth == 24:
  74.                 self.palette = ImagePalette.raw('BGR', '\x00\x00\x00' * start + self.fp.read(3 * size))
  75.             elif mapdepth == 32:
  76.                 self.palette = ImagePalette.raw('BGRA', '\x00\x00\x00\x00' * start + self.fp.read(4 * size))
  77.             
  78.         
  79.         
  80.         try:
  81.             rawmode = MODES[(imagetype & 7, depth)]
  82.             if imagetype & 8:
  83.                 self.tile = [
  84.                     ('tga_rle', (0, 0) + self.size, self.fp.tell(), (rawmode, orientation, depth))]
  85.             else:
  86.                 self.tile = [
  87.                     ('raw', (0, 0) + self.size, self.fp.tell(), (rawmode, 0, orientation))]
  88.         except KeyError:
  89.             pass
  90.  
  91.  
  92.  
  93. Image.register_open('TGA', TgaImageFile, _accept)
  94. Image.register_extension('TGA', '.tga')
  95.